package com.takeshi.landlords.util;

import cn.hutool.core.util.StrUtil;
import com.takeshi.landlords.resp.SysConstant;

import java.util.regex.Pattern;

/**
 * CardModel
 *
 * @author Nanase Takeshi
 * @date 2022/2/21 9:31
 */
public enum CardModel {

    /**
     * PASS
     */
    PASS(SysConstant.PASS),
    /**
     * 牌
     */
    ALL_CARD("[\\djqkasmJQKASM]+"),
    /**
     * 王炸
     */
    KING_FRIED("[s|S][m|M]"),
    /**
     * 四个的炸弹
     */
    BOMB("([\\djqkaJQKA])\\1{3}"),
    /**
     * 四带两张
     */
    FOUR_WITH_TWO("([\\djqkaJQKA])\\1{3}[\\djqkasmJQKASM]{2}"),
    /**
     * 四带两对
     */
    FOUR_WITH_TWO_PAIRS("([\\djqkaJQKA])\\1{3}([\\djqkaJQKA])\\2{1}([\\djqkaJQKA])\\3{1}"),
    /**
     * 三张相同的牌（三不带）
     */
    THREE_IDENTICAL_CARDS("([\\djqkaJQKA])\\1{2}"),
    /**
     * 三带一
     */
    THREE_BELT_ONE("([\\djqkaJQKA])\\1{2}([\\djqkasmJQKASM])\\2{0}"),
    /**
     * 三带一对
     */
    THREE_BELT_PAIR("([\\djqkaJQKA])\\1{2}([\\djqkasmJQKASM])\\2{1}"),
    /**
     * 飞机不带翅膀
     */
    AIRPLANE_PATTERN("([\\djqkaJQKA])\\1{2}"),
    /**
     * 飞机带翅膀（带单张）
     */
    AIRCRAFT_WITH_SINGLE_CARD_PATTERN(null),
    /**
     * 飞机带翅膀（带对子）
     */
    AIRPLANE_WITH_PAIR_PATTERN(null),
    /**
     * 顺子
     * (?![\djqkaJQKA]*?([\djqkaJQKA])[\djqkaJQKA]*?\1)[\djqkaJQKA]{5,}
     */
    STRAIGHT_PATTERN(null),
    /**
     * 连对
     */
    PAIR_PATTERN(null),
    /**
     * 单张
     */
    LEAFLET("[\\djqkasmJQKASM]{1}"),
    /**
     * 对子
     */
    PAIR("([\\djqkaJQKA])\\1{1}");

    private final Pattern pattern;

    CardModel(String pattern) {
        this.pattern = Pattern.compile(StrUtil.nullToDefault(pattern,StrUtil.EMPTY));
    }

    public Pattern getPattern() {
        return pattern;
    }

    public final boolean equalsAny(CardModel... cardModels) {
        for (CardModel cardModel : cardModels) {
            if (this == cardModel) {
                return true;
            }
        }
        return false;
    }

}
